package com.darrenchan.netease04

object Closure {
  def main(args: Array[String]): Unit = {
    val result = bibao
    result(2) //2
    result(2) //4
    result(2) //6
    result(2) //8

    val result1 = bibao
    result1(3) //11
  }


  /**
    * 闭包的作用：
    *   如果想访问一个函数ff的内部变量值m，正常情况下是不能访问的。
    *   那么定义（在这个函数内部定义一个新的函数f，这个f和m是平行关系，所以f能访问m）闭包以后：
    *   由于ff的返回值是f，ff就能访问到m
    */
  val bibao = {
    var sum = 0
    //访问sum
    val add_sum = (x: Int) => {
      sum += x
      println(sum)
    }
    add_sum
  }
}
